package br.com.fatecmococa.dao;

import br.com.fatecmococa.model.Cliente;
import java.util.List;
import org.hibernate.CacheMode;
import org.hibernate.HibernateException;

public class ClienteDAO extends DAO {

       
    // construtor
    public ClienteDAO() {        
    }

    // método para salvar e comitar os dados no BD
    public void salvar(Cliente cliente) {
        try{
            begin();
            getSession().save(cliente);
            commit();
            close();
        }catch(HibernateException e){
            e.printStackTrace();
            rollback();
        }
    }

    // método para atualizar os dados do objeto no BD
    public void atualizar(Cliente cliente) {
        try{
            begin();
            getSession().update(cliente);
            commit();
            close();
        }catch(HibernateException e){
            e.printStackTrace();
            rollback();
        }
    }

    // método para excluir os dados do objeto
    public void excluir(Cliente cliente) throws Exception{
        try{
            begin();
            getSession().delete(cliente);
            commit();
            close();
        }catch(HibernateException e){
            rollback();
        }
    }

    // método para listar todos os Clientes cadastrados
    public List<Cliente> todosClientes() throws Exception{
        List lista = getSession().
                createQuery("from Cliente").list();
        return lista;
    }       

    public Cliente getClientePorNome(String usuario) {              
        Cliente cliente = (Cliente)getSession().
                createQuery("select cliente from Cliente as cliente where cliente.usuario= :usuario").
                setCacheMode(CacheMode.REFRESH).
                setParameter("usuario", usuario).uniqueResult();
        return cliente;      
    }
    
     public Cliente getClientePorConta(Integer nConta) {              
        Cliente cliente = (Cliente)getSession().
                createQuery("select cliente from Cliente as cliente where cliente.nConta= :nConta").
                setCacheMode(CacheMode.REFRESH).
                setParameter("nConta", nConta).uniqueResult();
        return cliente;      
    }
    
}

